package juego.entidades;

import java.util.Vector;

import juego.graficos.ContenedorGrafico;
import juego.graficos.ElementoGrafico;
import juego.powerups.PowerUp;
import juego.roles.Jugador;
import juego.roles.Malo;
import juego.roles.Rol;

public abstract class Entidad extends ContenedorGrafico implements Cloneable {
	
	protected Vector<PowerUp> premios;
	protected Vector<Malo> malos;
	protected Jugador mario;
	
	public Entidad()
	{
		this.premios = new Vector<PowerUp>();
		this.malos = new Vector<Malo>();
		this.mario = null;
	}
	
	public PowerUp getPremio()
	{
		PowerUp premio = null;
		if( this.premios.size() > 0)
		{
			premio = this.premios.get(0);
			this.premios.remove(0);
		}
		return premio;
	}
	
	public void addPremio( PowerUp premio )
	{
		this.premios.add(premio);
	}
	
	public void addPremio( Vector<PowerUp> premios )
	{
		this.premios = premios;
	}
	
	public void removePremio( PowerUp premio )
	{
		this.premios.remove(premio);
	}
	
	public boolean quedanPremios()
	{
		return (this.premios.size() == 0);
	}
	
	
	// Operaciones para manipular los malos
	
	public boolean hayMalos()
	{
		return (this.malos.size() != 0);
	}
	
	public Vector<Malo> getMalos()
	{
		return this.malos;
	}
	
	public void addMalo( Malo m )
	{
		this.malos.add(m);
	}
	
	public void addMalo( Vector<Malo> m)
	{
		this.malos = m;
	}
	
	public void removeMalo( Malo m )
	{
		this.malos.remove(m);
	}
	
	
	// Operaciones para manipular a Mario
	
	public boolean estaMario()
	{
		return (this.mario != null);
	}
	
	public Jugador getMario()
	{
		return this.mario;
	}
	
	public void addMario( Jugador j)
	{
		this.mario = j;
		
	}
	
	public abstract boolean esTransitable();
	
	public abstract String nombreEntidad();
	
	public Object clonar()
	{
		try {
			return this.clone();
		} catch (CloneNotSupportedException e) {
			return null;
		}
	}
		
}
